package com.ww.basic.simple

object SimpleTest1 {
  def main(args: Array[String]): Unit = {
    // 场景：对List[Int]做过滤+映射
    val list = List(1, 2, 3, 4, 5)

    // 完整写法
    list.filter((x: Int) => {
        return x % 2 == 0
      })
      .map((y: Int) => {
        return y * 2
      })

    // 简化1：省略return（单表达式返回值默认是表达式结果）
    list.filter((x: Int) => {
        x % 2 == 0
      })
      .map((y: Int) => {
        y % 2 == 0
      })
    // 简化2：省略大括号（单表达式函数体）
    list.filter((x: Int) => x % 2 == 0)
      .map((y: Int) => y * 2)
    // 简化3：省略参数类型（编译器推断x/y是Int）
    list.filter((x) => x % 2 == 0)
      .map((y) => y * 2)
    // 简化4：单个参数省略括号（最常用）
    list.filter(x => x % 2 == 0)
      .map(y => y * 2)
    // 简化5：用_代替单个参数
    list.filter(_ % 2 == 0)
      .map(_ * 2)

    // 多参数匿名函数简化
    // 完整：list.foldLeft(0)((acc: Int, curr: Int) => acc + curr)
    list.foldLeft(0)(_ + _)
  }
}